1
Gestión del Crecimiento de Contenedores: Tamaño frente a Capacidad
AI037Lesson 14
00:00

En C++, gestionar el crecimiento de contenedores es un baile arquitectónico entre Tamaño (elementos actuales) y Capacidad (memoria reservada). Para contenedores contiguos como vector y string, alcanzar la capacidad desencadena una reubicación: el sistema encuentra un bloque de memoria más grande, mueve todos los elementos y destruye el bloque anterior. Esta es una operación costosa de $O(n)$ que causa invalidación de iteradores—sus punteros a elementos antiguos se vuelven "colgantes" y peligrosos.

1. Estrategia de Expansión

Para evitar reubicaciones frecuentes, vector las implementaciones asignan espacio de "buffer". El comando c.reserve(n) establece explícitamente una capacidad mínima sin añadir elementos, mientras que c.shrink_to_fit() es una solicitud no vinculante para devolver la memoria excedente al sistema operativo.

2. La Diferencia entre Resize y Reserve

Mientras que reserve solo afecta al buffer, resize(n) cambia activamente la lógica del contenedor. Reducir mediante resize destruye elementos, mientras que expandir agrega valores inicializados por defecto.

Tamaño (Utilizado)Capacidad AdicionalCapacidad Total
⚠️ ADVERTENCIA: Si resize el contenedor se reduce, los iteradores a elementos eliminados quedan invalidados. Si la expansión provoca una reubicación, TODOS todos los iteradores quedan invalidados.
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>